﻿

using System;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.SXXK.ToKhai;
using Janus.Windows.GridEX;
using Janus.Windows.UI.CommandBars;
using InheritableBoolean=Janus.Windows.UI.InheritableBoolean;


namespace Company.Interface.SXXK
{
	public partial class ToKhaiMauDichRegisterForm : BaseForm
	{
        private ToKhaiMauDichCollection tkmdCollection = new ToKhaiMauDichCollection();

        public ToKhaiMauDichRegisterForm()
		{
			InitializeComponent();
		}

		//-----------------------------------------------------------------------------------------

   
		private void ToKhaiMauDichManageForm_Load(object sender, EventArgs e)
		{
            try
			{
                txtNamTiepNhan.Text = DateTime.Today.Year.ToString();
                this.search();
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
			finally
			{
				this.Cursor = Cursors.Default;
			}
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGetListFromHQ_Click(object sender, EventArgs e)
        {
            short namdk = 0;
            if (txtNamTiepNhan.Text.Trim().Length > 0)
                namdk = Convert.ToInt16(txtNamTiepNhan.Text.Trim());
            try
            {
                
               
                WSForm wsForm = new WSForm();
                wsForm.ShowDialog(this);
                if (!wsForm.IsReady) return;
                this.Cursor = Cursors.WaitCursor;
                string strSTN = "";
                long count=ToKhaiMauDich.DongBoDuLieuHaiQuanAll(donViHaiQuanControl1.Ma, GlobalSettings.MA_DON_VI, namdk);
                if (count > 0)
                {
                    this.Cursor = Cursors.Default;
                    ShowMessage("Nhận dữ liệu thành công " + count + " tờ khai", false);
                    this.search();
                }
                else
                {
                    this.Cursor = Cursors.Default;
                    ShowMessage("Không có tờ khai nào cả.", false);
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                string st=ShowMessage(ex.Message+"\n Có lỗi khi thực hiện. Bạn có muốn đưa vào hàng đợi không", true);
                if (st == "Yes")
                {
                    Company.BLL.KDT.HangDoi hd = new Company.BLL.KDT.HangDoi();                   
                    hd.LoaiToKhai = LoaiToKhai.TO_KHAI_MAU_DICH;
                    hd.TrangThai = TrangThaiXuLy.DA_DUYET;
                    hd.ChucNang = ChucNang.DONG_BO_DU_LIEU;
                    hd.SoTK = 0;
                    hd.NamDangKy = namdk;
                    hd.MaHaiQuan = donViHaiQuanControl1.Ma;                 
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
        private ToKhaiMauDich getTKMDByPrimaryKey(int sotk,string mahaiquan,string maloaihinh,int namdk)
        {
            foreach (ToKhaiMauDich tk in this.tkmdCollection)
            {
                if (tk.SoToKhai == sotk && tk.MaHaiQuan.Trim()==mahaiquan && tk.NamDangKy==namdk && tk.MaLoaiHinh==maloaihinh) 
                    return tk;
            }
            return null;
        }

        private void dgList_RowDoubleClick(object sender, Janus.Windows.GridEX.RowActionEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                string sotk1=e.Row.Cells["SoToKhai"].Text;
                Form[] forms = this.ParentForm.MdiChildren;
                for (int i = 0; i < forms.Length; i++)
                {
                    if (forms[i].Name.ToString().Equals(sotk1))
                    {
                        forms[i].Activate();
                        return;
                    }
                }              
                int sotk = Convert.ToInt32(sotk1.Substring(0,sotk1.IndexOf("/")));
                int namdk = Convert.ToDateTime(e.Row.Cells[3].Text).Year;
                string mahq = donViHaiQuanControl1.Ma;
                string maloaihinh = e.Row.Cells[2].Value.ToString();
                ToKhaiMauDichDetailForm f = new ToKhaiMauDichDetailForm();                
                f.TKMD = this.getTKMDByPrimaryKey(sotk, mahq, maloaihinh, namdk);
                f.NhomLoaiHinh = maloaihinh.Substring(0,3);
                f.MdiParent = this.ParentForm;
                f.Name = sotk1;
                f.Show();             
            }
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Tìm kiếm dữ liệu.
        /// </summary>
        private void search()
        {
            // Xây dựng điều kiện tìm kiếm.
            string where = "1 = 1";
            where += string.Format(" AND MaHaiQuan = '{0}'", donViHaiQuanControl1.Ma);

            if (txtSoTiepNhan.TextLength > 0)
            {
                where += " AND SoToKhai = " + txtSoTiepNhan.Value;
            }
                      
                if (txtNamTiepNhan.TextLength > 0)
                {
                    where += " AND NamDangKy = " + txtNamTiepNhan.Value;
                }            
        
            // Thực hiện tìm kiếm.            
            this.tkmdCollection = new ToKhaiMauDich().SelectCollectionDynamic(where, "");
            dgList.DataSource = this.tkmdCollection;            
        }


        private void btnSearch_Click(object sender, EventArgs e)
        {
            this.search();
        }

        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                DateTime time = Convert.ToDateTime(e.Row.Cells["NgayDangKy"].Text);
                e.Row.Cells["MaLoaiHinh"].Text = this.LoaiHinhMauDich_GetName(e.Row.Cells["MaLoaiHinh"].Value.ToString().Trim());
                e.Row.Cells["SoToKhai"].Text = e.Row.Cells["SoToKhai"].Text + "/" + donViHaiQuanControl1.Ma + "/" + time.Year.ToString();
                switch (e.Row.Cells["TrangThaiThanhKhoan"].Value.ToString())
                {
                    case "S":
                        e.Row.Cells["TrangThaiThanhKhoan"].Text = "Đã được tính thuế sau kiểm hóa";
                        break;
                    case "D":
                        e.Row.Cells["TrangThaiThanhKhoan"].Text = "Đã duyệt";
                        break;
                    case "K":
                        e.Row.Cells["TrangThaiThanhKhoan"].Text = "Đã được kiểm hóa";
                        break;
                    case "C":
                        e.Row.Cells["TrangThaiThanhKhoan"].Text = "Đã được điều chỉnh thuế";
                        break;
                }

                string phanluong = e.Row.Cells["PhanLuong"].Text;
                if (phanluong == "1" || phanluong == "3" || phanluong == "5")
                    e.Row.Cells["PhanLuong"].Text = "Tờ khai đã được phân luồng xanh";
                else if (phanluong == "2" || phanluong == "4" || phanluong == "6" || phanluong == "10")
                {
                    e.Row.Cells["PhanLuong"].Text = "Tờ khai đã được phân luồng đỏ";
                }
                else if (phanluong == "8" || phanluong == "12")
                    e.Row.Cells["PhanLuong"].Text = "Tờ khai đã được phân luồng vàng";

                
                DateTime ngayTNX = Convert.ToDateTime(e.Row.Cells["NGAY_THN_THX"].Value.ToString());
                DateTime ngayDK = Convert.ToDateTime(e.Row.Cells["NgayDangKy"].Value.ToString());
                DateTime today = DateTime.Today;
                string loaiHinh = (e.Row.Cells["MaLoaiHinh"].Value.ToString());
                if(loaiHinh.StartsWith("NSX"))
                {
                    string thanhly = e.Row.Cells["ThanhLy"].Text;
                    if (thanhly == "H")
                    {
                        e.Row.Cells["ChuY"].Text = "Tờ khai này đã thanh khoản hết";
                        return;
                    }
                    TimeSpan time1 = today.Subtract(ngayDK);
                    int ngay = 275 - time1.Days;
                    if (ngay > 0)
                        e.Row.Cells["ChuY"].Text = "Còn " + ngay.ToString() + " ngày phải thanh khoản";
                    else if (ngay == 0)
                        e.Row.Cells["ChuY"].Text = "Hết hạn thanh khoản trong ngày hôm nay";                        
                    else
                        e.Row.Cells["ChuY"].Text = "Đã hết hạn thanh khoản";

                }
                if (ngayTNX.Year <= 1900)
                {                    
                    e.Row.Cells["NGAY_THN_THX"].Text = "";
                }
            }
        }

        private void cmMain_CommandClick(object sender, CommandEventArgs e)
        {
            switch (e.Command.Key)
            {
                case "cmdSingleDownload":
                    this.download();
                    break;
                case "ThongTinDieuChinh":
                    this.DieuChinhThue();
                    break;
                case "XemThongTinDieuChinh":
                    this.XemThongTinDieuChinhThue();
                    break;  
            }
        }
        private void XemThongTinDieuChinhThue()
        {
             GridEXSelectedItemCollection items = dgList.SelectedItems;
             foreach (GridEXSelectedItem i in items)
             {
                 if (i.RowType == RowType.Record)
                 {
                     ToKhaiMauDich tkmd = (ToKhaiMauDich)i.GetRow().DataRow;
                     HangMauDichDieuChinhForm f = new HangMauDichDieuChinhForm();
                     HangMauDichDieuChinh hdc = new HangMauDichDieuChinh();
                     hdc.MaHaiQuan = tkmd.MaHaiQuan;
                     hdc.MaLoaiHinh = tkmd.MaLoaiHinh;
                     hdc.NamDangKy = tkmd.NamDangKy;
                     hdc.SoToKhai = tkmd.SoToKhai;
                     hdc.LanDieuChinh = 1;
                     f.HMDCollection = hdc.SelectCollectionBy_SoToKhai_AND_MaLoaiHinh_AND_MaHaiQuan_AND_NamDangKy_AND_LanDieuChinh();
                     f.tokhai = tkmd;
                     if (f.HMDCollection == null || f.HMDCollection.Count == 0)
                     {
                         ShowMessage("Tờ khai này chưa có lần điều chỉnh nào cả.",false);
                         return;
                     }
                     f.HMDCollection = hdc.SelectCollectionByLanDieuChinhMax();
                     f.ShowDialog();
                     break;
                 }
               }          
        }
        private void DieuChinhThue()
        {
            try
            {
                WSForm wsForm = new WSForm();
                wsForm.ShowDialog(this);
                if (!wsForm.IsReady) return;
                bool ok = true;
                int k = 0;
                int item = 0;
                GridEXSelectedItemCollection items = dgList.SelectedItems;
                foreach (GridEXSelectedItem i in items)
                {
                    this.Cursor = Cursors.WaitCursor;
                    if (i.RowType == RowType.Record)
                    {
                        ToKhaiMauDich tkmd = (ToKhaiMauDich)i.GetRow().DataRow;
                        tkmd.MaHaiQuan = donViHaiQuanControl1.Ma;
                        ThongTinDieuChinh ttdc = new ThongTinDieuChinh();
                        ttdc.SoToKhai = tkmd.SoToKhai;
                        ttdc.MaHaiQuan = tkmd.MaHaiQuan;
                        ttdc.MaLoaiHinh = tkmd.MaLoaiHinh;
                        ttdc.NamDangKy = tkmd.NamDangKy;
                        try
                        {
                            k++;
                            item++;
                            ttdc.WSGetDanhSachDieuChinhOfToKhai();                            
                        }
                        catch (Exception ex)
                        {
                            this.Cursor = Cursors.Default;
                            if (ex.Message != "Chưa có danh sách điều chỉnh của tờ khai này")
                            {
                                ok = false;
                                item--;
                                string message = "";
                                if (k == items.Count)
                                    message = "Tờ khai số " + tkmd.SoToKhai.ToString() + " không nhận dữ liệu điều chỉnh thuế về được?\nBạn có muốn đưa vào hàng đợi không";
                                else
                                    message = "Tờ khai số " + tkmd.SoToKhai.ToString() + " không nhận dữ liệu điều chỉnh thuế về được?\nBạn có muốn đưa vào hàng đợi và \ntiếp tục nhận dữ liệu của các bản ghi tiếp không";
                                string st = ShowMessage(message, true);
                                if (st != "Yes")
                                    break;
                                else
                                {
                                    if (k < items.Count)
                                        ok = true;
                                    else
                                        ok = false;
                                    Company.BLL.KDT.HangDoi hd = new Company.BLL.KDT.HangDoi();
                                    hd.LoaiToKhai = LoaiToKhai.DIEU_CHINH_THUE;
                                    hd.TrangThai = TrangThaiXuLy.DA_DUYET;
                                    hd.ChucNang = ChucNang.DONG_BO_DU_LIEU;
                                    hd.SoTK = tkmd.SoToKhai;
                                    hd.NamDangKy = tkmd.NamDangKy;
                                    hd.MaHaiQuan = tkmd.MaHaiQuan;
                                    hd.MaLoaiHinh = tkmd.MaLoaiHinh;
                                    MainForm.AddToQueueForm(hd);
                                    MainForm.ShowQueueForm();
                                }
                            }
                        }

                    }
                }
                this.Cursor = Cursors.Default;
                if (item > 0)
                    ShowMessage("Nhận dữ liệu điều chinh thành công " + item.ToString() + " tờ khai", false);                                                      
                this.search();
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                ShowMessage(ex.Message, false);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
                
        private void download()
        {
            try
            {
                WSForm wsForm = new WSForm();
                wsForm.ShowDialog(this);
                if (!wsForm.IsReady) return;                                      
                bool ok = true;
                int k=0;
                int itemOK = 0;
                GridEXSelectedItemCollection items = dgList.SelectedItems;
                foreach (GridEXSelectedItem i in items)
                {
                    this.Cursor = Cursors.WaitCursor;
                    if (i.RowType == RowType.Record)
                    {
                        ToKhaiMauDich tkmd = (ToKhaiMauDich) i.GetRow().DataRow;
                        tkmd.MaHaiQuan = donViHaiQuanControl1.Ma;
                        try
                        {
                            k++;
                            itemOK++;
                            tkmd.DongBoDuLieuHaiQuan();
                           
                        }
                        catch(Exception ex)
                        {
                            this.Cursor = Cursors.Default;
                            ok = false;
                            itemOK--;
                            string message = "";
                            if (k == items.Count)
                                message = "Tờ khai số " + tkmd.SoToKhai.ToString() + " không nhận dữ liệu về được?\nBạn có muốn đưa vào hàng đợi không";
                            else
                                message = "Tờ khai số " + tkmd.SoToKhai.ToString() + " không nhận dữ liệu về được?\nBạn có muốn đưa vào hàng đợi và \ntiếp tục nhận dữ liệu của các bản ghi tiếp không";
                            string st = ShowMessage(message, true);
                            if (st != "Yes")
                                break;
                            else
                            {
                                if (k < items.Count)
                                    ok = true;
                                else
                                    ok = false;
                                Company.BLL.KDT.HangDoi hd = new Company.BLL.KDT.HangDoi();
                                hd.LoaiToKhai = LoaiToKhai.TO_KHAI_MAU_DICH;
                                hd.TrangThai = TrangThaiXuLy.DA_DUYET;
                                hd.ChucNang = ChucNang.DONG_BO_DU_LIEU;
                                hd.SoTK = tkmd.SoToKhai;
                                hd.NamDangKy = tkmd.NamDangKy;
                                hd.MaHaiQuan = tkmd.MaHaiQuan;
                                hd.MaLoaiHinh = tkmd.MaLoaiHinh;
                                MainForm.AddToQueueForm(hd);
                                MainForm.ShowQueueForm();
                            }

                        }

                    }
                }
                this.Cursor = Cursors.Default;
                if (itemOK > 0)
                    ShowMessage("Nhận dữ liệu thành công " + itemOK.ToString() + " tờ khai", false);                                                    
                this.search();
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                ShowMessage(ex.Message,false);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        private void NhanDuLieuCTMenu_Click(object sender, EventArgs e)
        {
            try
            {
                WSForm wsForm = new WSForm();
                wsForm.ShowDialog(this);
                if (!wsForm.IsReady) return;
                bool ok = true;
                int k = 0;
                int itemOK = 0;
                GridEXSelectedItemCollection items = dgList.SelectedItems;
                foreach (GridEXSelectedItem i in items)
                {                   
                    if (i.RowType == RowType.Record)
                    {
                        ToKhaiMauDich tkmd = (ToKhaiMauDich)i.GetRow().DataRow;
                        tkmd.MaHaiQuan = donViHaiQuanControl1.Ma;
                        try
                        {
                            this.Cursor = Cursors.WaitCursor;                         
                            tkmd.DongBoDuLieuHaiQuan();
                            this.Cursor = Cursors.Default;                            
                                ShowMessage("Nhận dữ liệu thành công ", false);
                            this.search();
                        }
                        catch (Exception ex)
                        {
                            this.Cursor = Cursors.Default;
                             string   message = "Tờ khai số " + tkmd.SoToKhai.ToString() + " không nhận dữ liệu về được?\nBạn có muốn đưa vào hàng đợi không";
                             string st = ShowMessage(message, true);
                            if (st == "Yes")                                
                            {                               
                                Company.BLL.KDT.HangDoi hd = new Company.BLL.KDT.HangDoi();
                                hd.LoaiToKhai = LoaiToKhai.TO_KHAI_MAU_DICH;
                                hd.TrangThai = TrangThaiXuLy.DA_DUYET;
                                hd.ChucNang = ChucNang.DONG_BO_DU_LIEU;
                                hd.SoTK = tkmd.SoToKhai;
                                hd.NamDangKy = tkmd.NamDangKy;
                                hd.MaHaiQuan = tkmd.MaHaiQuan;
                                hd.MaLoaiHinh = tkmd.MaLoaiHinh;
                                MainForm.AddToQueueForm(hd);
                                MainForm.ShowQueueForm();
                            }

                        }
                        break;
                    }
                }              
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                ShowMessage(ex.Message, false);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        private void DCThue_Click(object sender, EventArgs e)
        {
            try
            {
                WSForm wsForm = new WSForm();
                wsForm.ShowDialog(this);
                if (!wsForm.IsReady) return;
                bool ok = true;
                int k = 0;
                int item = 0;
                GridEXSelectedItemCollection items = dgList.SelectedItems;
                foreach (GridEXSelectedItem i in items)
                {
                    this.Cursor = Cursors.WaitCursor;
                    if (i.RowType == RowType.Record)
                    {
                        ToKhaiMauDich tkmd = (ToKhaiMauDich)i.GetRow().DataRow;
                        tkmd.MaHaiQuan = donViHaiQuanControl1.Ma;
                        ThongTinDieuChinh ttdc = new ThongTinDieuChinh();
                        ttdc.SoToKhai = tkmd.SoToKhai;
                        ttdc.MaHaiQuan = tkmd.MaHaiQuan;
                        ttdc.MaLoaiHinh = tkmd.MaLoaiHinh;
                        ttdc.NamDangKy = tkmd.NamDangKy;
                        try
                        {
                            this.Cursor = Cursors.Default;
                            ttdc.WSGetDanhSachDieuChinhOfToKhai();                            
                            ShowMessage("Nhận dữ liệu điều chỉnh thành công ", false);
                            //this.search();
                           
                        }
                        catch (Exception ex)
                        {
                            this.Cursor = Cursors.Default;
                            if (ex.Message == "Chưa có danh sách điều chỉnh của tờ khai này")
                            {
                                ShowMessage(ex.Message, false);
                                return;
                            }
                            string    message = "Tờ khai số " + tkmd.SoToKhai.ToString() + " không nhận dữ liệu điều chỉnh thuế về được?\nBạn có muốn đưa vào hàng đợi không";
                            string st = ShowMessage(message, true);
                            if (st == "Yes")                            
                            {                               
                                Company.BLL.KDT.HangDoi hd = new Company.BLL.KDT.HangDoi();
                                hd.LoaiToKhai = LoaiToKhai.DIEU_CHINH_THUE;
                                hd.TrangThai = TrangThaiXuLy.DA_DUYET;
                                hd.ChucNang = ChucNang.DONG_BO_DU_LIEU;
                                hd.SoTK = tkmd.SoToKhai;
                                hd.NamDangKy = tkmd.NamDangKy;
                                hd.MaHaiQuan = tkmd.MaHaiQuan;
                                hd.MaLoaiHinh = tkmd.MaLoaiHinh;
                                MainForm.AddToQueueForm(hd);
                                MainForm.ShowQueueForm();
                            }

                        }
                        break;
                    }
                }
                
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                ShowMessage(ex.Message, false);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        private void xemThongTinDC_Click(object sender, EventArgs e)
        {
            XemThongTinDieuChinhThue();
        }
	
	}
}